# -*- coding: utf-8 -*-
# @Time    : 2024/6/5 10:46
# @Author  : yujiahao
# @File    : 00_whats_python.py
# @description:讲故事用的，了解Python是啥，能做啥,后续我有可能会和Java、Scala进行简单对比一下，旨在对比学习理解快，同时也复习一下，后面不在重复说明。

# todo 1、何为 pyhton

'''
Python 是一种高级编程语言，以其简洁易读的语法和强大的功能而广受欢迎。以下是关于 Python 的一些关键点：
        - 高级编程语言：Python 是一种高级编程语言，这意味着它的语法设计更接近人类的自然语言，使得编写代码更加直观和容易理解。
        - 解释型语言：Python 是解释型语言，这意味着 Python 代码在运行时由解释器逐行执行，而不是事先编译成机器码。
        - 动态类型：Python 是动态类型语言，变量在运行时可以改变类型，这使得编写代码更加灵活。
        - 多范式：Python 支持多种编程范式，包括面向对象编程、过程化编程和函数式编程。

'''

# todo 2、Python 的特点
'''
    - 简洁易读：Python 的语法设计简洁明了，代码可读性强，适合快速开发和迭代。
    - 丰富的标准库：Python 提供了丰富的标准库，涵盖了文件操作、网络通信、数据处理等各个方面，极大地提高了开发效率。
    - 跨平台：Python 是跨平台的，可以在 Windows、Linux、macOS 等多个操作系统上运行。
    - 强大的社区支持：Python 拥有一个庞大而活跃的社区，提供了大量的第三方库和工具，可以满足各种开发需求。
    - 广泛应用：Python 被广泛应用于 Web 开发、数据分析、人工智能、科学计算、自动化运维等领域。

'''

# todo 3、Python 的历史

'''
    - 诞生：Python 由 Guido van Rossum 于 1989 年在荷兰的国家数学和计算机科学研究所（CWI）开始设计，并于 1991 年发布了第一个公开版本。
    - 发展：随着时间的推移，Python 不断发展和演进，逐渐成为一种主流编程语言。Python 2.x 系列和 Python 3.x 系列是两个主要版本，其中 Python 3.x 是当前主流版本。

'''

# todo 4、Python 的应用领域

'''
    - 云计算: 云计算最火的语言， 典型应用OpenStack
    - WEB开发: 众多优秀的WEB框架，众多大型网站均为Python开发，Youtube, Dropbox, 豆瓣...典型WEB框架有Django
    - 科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
    - 系统运维: 运维人员必备语言
    - 爬虫:通过代码来模拟人进行页面访问,对信息进行批量的获取
    - 金融：量化交易，金融分析，在金融工程领域，Python不但在用，且用的最多，而且重要性逐年提高。原因：作为动态语言的Python，语言结构清晰简单，库丰富，成熟稳定，科学计算和统计分析都很牛逼，生产效率远远高于c,c++,java,尤其擅长策略回测'
    - 图形GUI: PyQT, WxPython,TkInter
'''

# todo、 5、Python是什么编程语言

'''
    编程语言主要从以下几个角度为进行分类，编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言，
我们主要通过编译型和解释性来划分Python是什么编程语言。

    ① 编译型与解释型
            编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
        而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
        为什么会有编译型好解释型语言是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制 的形式)
        
            >> 编译型 　　 
                优点：编译器一般会有预编译的过程对代码进行优化。因为编译只做一次，运行时不需要编译，所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
                缺点：编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码，不同的操作系统之间移植就会有问题，需要根据运行的操作系统环境编译不同的可执行文件。
        
            >> 解释型
                优点：有良好的平台兼容性，在任何环境中都可以运行，前提是安装了解释器（虚拟机）。灵活，修改代码的时候直接修改就可以，可以快速部署，不用停机维护。
        　　     缺点：每次运行的时候都要解释一遍，性能上不如编译型语言。
    ② 动态语言和静态语言
        通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。
            
            (1）动态类型语言：  动态类型语言是指在运行期间才去做数据类型检查的语言，也就是说，在用动态类型的语言编程时，
                            永远也不用给任何变量指定数据类型，该语言会在你第一次赋值给变量时，在内部将数据类型记录下来。
                            Python和Ruby就是一种典型的动态类型语言，其他的各种脚本语言如VBScript也多少属于动态类型语言。

            (2）静态类型语言：  静态类型语言与动态类型语言刚好相反，它的数据类型是在编译其间检查的，也就是说在写程序时要声明所有变量的数据类型，
                            C/C++是静态类型语言的典型代表，其他的静态类型语言还有C#、JAVA等。
                            
    ③ 强类型定义语言和弱类型定义语言
            
            (1）强类型定义语言：强制数据类型定义的语言。也就是说，一旦一个变量被指定了某个数据类型，如果不经过强制转换，那么它就永远是这个数据类型了，
            【强类型定义语言是类型安全的语言】

            举个例子：如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。


            (2）弱类型定义语言：数据类型可以被忽略的语言。它与强类型定义语言相反,一个变量可以赋不同数据类型的值。

                强类型定义语言在速度上可能略逊色于弱类型定义语言，但是强类型定义语言带来的严谨性能够有效的避免许多错误。
                【另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的！】

            例如：Python是动态语言，是强类型定义语言（类型安全的语言）; VBScript是动态语言，是弱类型定义语言（类型不安全的语言）; 
                 JAVA是静态语言，是强类型定义语言（类型安全的语言）。
    ④ 总结
    
        【通过上面这些介绍，我们可以得出. Python是一门动态解释性的强类型定义语言。】
'''


# todo 6、Python的种类
'''
    Cpython
    　　Python的官方版本，使用C语言实现，使用最为广泛，CPython实现会将源文件（py文件）转换成字节码文件（pyc文件），然后运行在Python虚拟机上。
    
    Jyhton
    　　Python的Java实现，Jython会将Python代码动态编译成Java字节码，然后在JVM上运行。
    
    IronPython
    　Python的C#实现，IronPython将Python代码编译成C#字节码，然后在CLR上运行。（与Jython类似）
    
    PyPy（特殊）
    　　Python实现的Python，将Python的字节码字节码再编译成机器码。
'''


# todo 7、 Python运行环境
"""
    Python 运行环境是指支持 Python 程序运行所需的软硬件环境，了解并正确配置 Python 运行环境是确保应用稳定运行的关键。以下是对 Python 运行环境的详细解释：
   
    1. 解释器（相当于JVM，可以这么理解一下，一定要装）

    在官网选择合适的版本安装：http://www.python.org 点击Downloads下载,安装成功之后，在终端输入Python 回车查看是否进入解释器安装成功，输入 print('Hello Python') 回车 这里不细说。
            
            >> python2写法: print  'hello world'
            >> python3写法: print('hello world')

        Python 是一种解释型语言，这意味着 Python 代码在运行时由解释器逐行执行。Python 解释器可以在多种操作系统上运行，包括 Windows、Linux、macOS 等。
        
        - CPython：这是最常用的 Python 解释器，也是 Python 官方实现。CPython 是用 C 语言编写的，支持大多数 Python 标准库和第三方库。
        - PyPy：这是一个高性能的 Python 解释器，使用 JIT（即时编译）技术来提高执行速度。PyPy 兼容 CPython，但在性能上有显著提升。
        - Jython：这是一个为 Java 平台实现的 Python 解释器，可以直接调用 Java 库。
        - IronPython：这是一个为 .NET 平台实现的 Python 解释器，可以直接调用 .NET 框架的库。
        - MicroPython：这是一个为微控制器和嵌入式系统设计的精简版 Python 解释器。
    
    2. 虚拟环境（相当于独立项目的一个Python环境，里面不仅包括解释器还有各种依赖）
    
        虚拟环境允许你在同一台机器上隔离不同项目的依赖关系，避免库版本冲突。Python 提供了 venv 模块来创建虚拟环境。
    
    - 创建虚拟环境：
          python -m venv myenv（自定义起一个虚拟环境的名字，下面引用这个名字）
        
        注意：新建项目一般会有就不用创建，激活一下，clone的项目一般没有，但是会有一个requirements.txt文件，直接安装下面就行，
        另外你的项目完成了，虚拟环境一般不要提交上去，需要手动生成一个requirements.txt文件保存你项目的依赖就行（相当于Java用Maven管理依赖的pom.xml文件。）
        「项目根目录下运行这个命令： pip freeze > requirements.txt」。
    
    - 激活虚拟环境：
      - 在 Windows 上：
        myenv\Scripts\activate
      - 在 Unix 或 macOS 上：
        source myenv/bin/activate
    
    - 安装依赖：
      在虚拟环境激活的情况下使用 pip 安装依赖：
      pip install <package_name>
        就像前面说的一般都项目执行这个就行：pip install -r requirements.txt
        或者手动pip install 依赖名字 自己下载：
    
    - 退出虚拟环境：
      deactivate
    
    3. 包管理器，相当于用Maven中下载依赖
    
        Python 使用 pip 作为其主要的包管理器。pip 允许你从 Python 包索引（PyPI）中安装和管理第三方库和工具。
        
        - 安装包：
          pip install <package_name>
        
        - 列出已安装的包：
          pip list
        
        - 卸载包：
          pip uninstall <package_name>
        
    4. 集成开发环境 (IDE)
    
        为了提高开发效率，许多开发者使用集成开发环境（IDE）或代码编辑器来编写和调试 Python 代码。以下是一些流行的 Python IDE 和编辑器：
        
        - PyCharm：由 JetBrains 开发的专业 Python IDE，提供强大的代码分析、调试和测试功能。
        - Visual Studio Code (VS Code)：由 Microsoft 开发的免费开源代码编辑器，具有丰富的扩展支持，包括 Python 扩展。
        - Jupyter Notebook：广泛用于数据科学和机器学习领域，支持交互式编程和数据可视化。
        - Spyder：专为数据科学家设计的 IDE，集成了许多科学计算工具。
        - IDLE：Python 自带的简单 IDE，适合初学者。
    
    5. 环境配置
    
        在配置 Python 运行环境时，你可能需要设置一些环境变量：
        
        - PATH：将 Python 解释器和 pip 添加到系统的 PATH 环境变量中，以便在命令行中直接使用 python 和 pip 命令。
        - PYTHONPATH：用于指定 Python 模块搜索路径，使得 Python 可以找到你自定义的模块和包。
    
    6. 部署环境
    
        在将 Python 应用部署到生产环境时，通常会使用一些工具和平台：
        
        - Docker：通过容器化技术打包应用及其依赖，确保在任何环境下都能一致运行。
        - 虚拟机：如 AWS EC2、Google Compute Engine 等，提供完整的操作系统环境。
        - 平台即服务 (PaaS)：如 Heroku、Google App Engine 等，简化应用部署和管理。


"""

# todo 8、 示例代码
'''
需求：这个示例代码从控制台输入a、b的值，并定义了一个函数 add 来计算两个数的和，增加异常处理，从控制台打印结果。

我分别用Java和Python以及Scala分别实现，可以对比看一下。

另外：这里推荐一个在线运行代码网址，支持多种语言（还有很多工具可以用，很方便），如果没有环境可以在这里运行：【https://tool.lu/coderunner/】

① Java实现（这里由于无法运行Java，所以我放到注释里面了，有兴趣可以自己了解一下）

        package com.yujiahao.bigdata.app;
        
        import java.util.Scanner;
        
        /**
         * @Description:用Java实现
         * @Author: yujiahao
         * @Date: 2024/6/5 11:49
         * @Version: 1.0
         */
        
        public class MyFirstJavaCode {
            // 定义 add 方法
            public static int add(int a, int b) {
                return a + b;
            }
        
            public static void main(String[] args) {
                Scanner scanner = new Scanner(System.in);
        
                try {
                    // 获取用户输入
                    System.out.print("请输入数字a的值：");
                    int a = Integer.parseInt(scanner.nextLine());
        
                    System.out.print("请输入数字b的值：");
                    int b = Integer.parseInt(scanner.nextLine());
        
                    // 调用 add 方法并打印结果
                    int result = add(a, b);
                    System.out.println("a 和 b的和是: " + result);
                } catch (NumberFormatException e) {
                    System.out.println("输入有误，程序崩溃！");
                } finally {
                    System.out.println("我一定会执行的");
                }
        
                scanner.close();
            }
        }

    【执行代码】 一般的如果有JDK：将上述Java代码存到一个MyFirstJavaCode.java结尾的文本里面，在终端运行
        >> 先编译：javac  /绝对路径下/MyFirstJavaCode.java 回车之后会同级文件下生成一个MyFirstJavaCode.class的编译文件，
        >> 后执行：java /绝对路径下/MyFirstJavaCode
  
②Scala实现
        
        package test

        /**
         * @Description:用Scala实现
         * @Author: yujiahao
         * @Date: 2024/6/5 11:55
         * @Version: 1.0
         */
        
        object MyFirstScalaCode {
          object AddNumbers {
            def main(args: Array[String]): Unit = {
              // 定义 add 方法
              def add(a: Int, b: Int): Int = {
                a + b
              }
        
              try {
                // 从控制台输入
                println("请输入数字a的值：")
                val a = scala.io.StdIn.readInt()
                println("请输入数字b的值：")
                val b = scala.io.StdIn.readInt()
        
                // 调用 add 方法并打印结果
                val result = add(a, b)
                println(s"a 和 b的和是: $result")
              } catch {
                case e: NumberFormatException =>
                  println("输入有误，程序崩溃！")
              } finally {
                println("我一定会执行")
              }
            }
          }
        }

  【由于Scala是基于JDK运行的，所以也需要先编译后执行，编译：scalac AddNumbers.scala，执行：scala AddNumbers，这里不再说明，感兴趣的可以看一下Scala语言】
    
③ Python实现
    在代码第一行要增加下面【】里面的代码，必须要加在文件的第一行,这个是告诉解释器当文件中出现中文的时候使用utf-8的编码进行查看，不然可能报错
        【# -*- coding: utf-8 -*-】
    【执行代码】可以将下面代码存成my_first_python_code.py文件，在终端运行：Python  /绝对路径下/my_first_python_code.py


Java 和 Python 对比总结：

    可以看到同一个功能用Java来写会比较繁琐，代码行数比较多，由于Java是编译型语言所以编写完源代码之后要先编译，然后再执行编译文件，
而用Python编写起来就相对简洁的多，并且由于Python是解释性语言，所以直接就可以执行，不用预编译操作，这样的弊端就是跑起来相对久一些。

1. 语法和易用性
- Python:
  - 语法简洁，易于学习和使用。
  - 动态类型，代码更简洁。
  - 适合快速开发和原型设计。

- Java:
  - 语法相对复杂，需要显式声明类型。
  - 静态类型，代码更加严格和安全。
  - 适合大型项目和企业级应用。

2. 性能
- Python:
  - 解释型语言，运行速度相对较慢。
  - 适用于开发速度优先的场景。

- Java:
  - 编译型语言，运行在 Java 虚拟机 (JVM) 上，性能较高。
  - 适用于需要高性能的应用。

3. 应用领域
- Python:
  - 数据科学和机器学习。
  - Web 开发。
  - 自动化和脚本编写。
  - 科学计算和研究。

- Java:
  - 企业级应用和大型系统。
  - Android 应用开发。
  - Web 开发。
  - 分布式系统和大数据处理。

4. 生态系统和社区支持
- Python:
  - 丰富的库和框架，特别是在数据科学领域。
  - 活跃的社区，丰富的学习资源。

- Java:
  - 成熟的生态系统，广泛的企业应用支持。
  - 强大的社区支持和大量的开源项目。

5. 开发工具
- Python:
  - 支持多种 IDE 和编辑器，如 PyCharm、VS Code 等。
  - 轻量级编辑器如 Sublime Text 也很常用。

- Java:
  - 常用的 IDE 有 IntelliJ IDEA、Eclipse 和 NetBeans。
  - 强大的调试和代码分析工具。

6. 部署
- Python:
  - 部署相对简单，可以直接运行脚本文件。
  - 使用虚拟环境管理依赖。

- Java:
  - 部署时需要将代码编译成字节码，并在 JVM 上运行。
  - 通常打包为 JAR 或 WAR 文件进行部署。

7.一般来说：
- Python 适合初学者、快速开发、数据科学和脚本编写，语法简洁，开发效率高。
- Java 适合需要高性能、稳定性和可维护性的企业级应用，静态类型和编译机制使得代码更加安全和可靠。

'''

 # Python语言实现

 # 定义 add 方法
def add(a, b):
    return a + b
try:
    # 从控制台输入
    a = int(input("请输入数字a的值："))
    b = int(input("请输入数字b的值："))
    # 调用 add 方法并打印结果
    result = add(a, b)
    print(f"a 和 b的和是:{result}")
except ValueError:
    print("输入有误，程序崩溃！")
finally:
    print('我一定会执行')






